package com.flyqiu.common.sc.calculate;

import cn.hutool.core.convert.Convert;
import com.flyqiu.common.sc.statistical.IFlyQiuStatistical;

import java.math.BigDecimal;

/**
 * 抽象基类，用于数值计算的基础实现。
 * 提供了一些基本的方法来处理 BigDecimal 类型的数据。
 */
public abstract class FlyQiuNumBaseCalculate implements FlyQiuCalculate<BigDecimal> {

    /**
     * 缓存值，默认为 BigDecimal.ZERO。
     */
    protected BigDecimal cacheVal = getDefVal();

    /**
     * 获取默认值。
     *
     * @return 默认值，默认为 BigDecimal.ZERO
     */
    @Override
    public BigDecimal getDefVal() {
        return BigDecimal.ZERO;
    }

    /**
     * 获取计算值的类类型。
     *
     * @return 计算值的类类型，即 BigDecimal.class
     */
    @Override
    public Class<BigDecimal> getCalculateValueClazz() {
        return BigDecimal.class;
    }

    /**
     * 将对象转换为 BigDecimal 类型。
     *
     * @param value 要转换的对象
     * @return 转换后的 BigDecimal 对象
     */
    @Override
    public BigDecimal convert(Object value) {
        return Convert.convert(BigDecimal.class, value);
    }

    /**
     * 重置计算结果。
     * 将缓存值设置为默认值。
     */
    @Override
    public void restCalculate() {
        cacheVal = getDefVal();
    }

    /**
     * 获取当前计算的结果值。
     *
     * @param context 统计上下文
     * @return 当前缓存的计算结果值
     */
    @Override
    public BigDecimal getValue(IFlyQiuStatistical<?> context) {
        return cacheVal;
    }
}
